package edu.eam.tallermecanicoejb.beans;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import edu.eam.tallermecanicojpa.dao.AutomovilDAO;
import edu.eam.tallermecanicojpa.entidades.Automovil;

/**
 * Session bean del automovil
 */
@Stateless
@LocalBean
public class AutomovilBean {

	@PersistenceContext
	/**
	 * EntityManager para manejar las transacciones del automovil con la base de
	 * datos
	 */
	private EntityManager entityManager;

	/* Data Acces Object del automovil */
	private AutomovilDAO automovilDAO;

	/* Constructor del automovilBean vacio */
	public AutomovilBean() {
		super();
	}

	@PostConstruct
	/* Metodo para inicializar el AutomovilDAO */
	public void inicializarAutomovilDAO() {
		automovilDAO = new AutomovilDAO(entityManager);
	}

	/**
	 * Metodo para persistir un automovil en la base de datos
	 * 
	 * @param automovil
	 *            Automovil que se quiere persistir en la base de datos
	 */
	public void persistir(Automovil automovil) {
		automovilDAO.persistir(automovil);
	}

	/**
	 * Metodo para actualizar un automovil en la base de datos
	 * 
	 * @param automovil
	 *            Automovil que se quiere actualizar en la base de datos
	 */
	public void actualizar(Automovil automovil) {
		automovilDAO.actualizar(automovil);
	}

	/**
	 * Metodo para recuperar un automovil de la base de datos conociendo su
	 * numero de identificacion
	 * 
	 * @param id
	 *            Numero de identificacion del automovil que se quiere recuperar
	 *            de la base de datos
	 * @return El automovil que se encontro con el id o null si no se encontro
	 */
	public Automovil recuperar(long id) throws Exception {
		return automovilDAO.recuperar(id);
	}

	/**
	 * Metodo para eliminar un automovil de la base de datos
	 * 
	 * @param automovil
	 *            Automovil que se quiere eliminar de la base de datos
	 */
	public void eliminar(Automovil automovil) {
		automovilDAO.eliminar(automovil);
	}

	/* Metodo para listar todos los automoviles de la base de datos */
	public List<Automovil> listar() {
		return automovilDAO.listar();
	}

	/**
	 * Metodo para recuperar un automovil y sus visitas al taller mecanico
	 * conociendo su numero de identificacion
	 * 
	 * @param id
	 *            Numero de identificacion del automovil que se quiere recuperar
	 *            de la base de datos
	 * @return El automovil que se encontro con el id o null si no se encontro
	 */
	public Automovil recuperarConVisitas(long id) throws Exception {
		return automovilDAO.recuperarConVisitas(id);
	}

	/**
	 * Metodo para listar todos los automoviles con sus visitas al taller
	 * mecanico
	 */
	public List<Automovil> listarConVisitas() {
		return automovilDAO.listarConVisitas();
	}
}
